#ifndef EXECUTOR_H_
#define EXECUTOR_H_

#define TAB		"\t"
#define EMPTY	""

//#include "UI.h"
#include "Task.h"
#include "Validator.h"
#include "Storage.h"
#include <iostream>
#include <string>
#include <string>
#include <algorithm>

using namespace std;

class Executor{
public:
	// These are the possible command types
	static enum COMMAND_TYPE {
		ADD, DELETE, SHOW, INVALID
	};	
	static enum KEYWORD_TYPE {
		DATE, STARTS, ENDS, DETAIL
	};	

	static vector<Task*> taskList;
	COMMAND_TYPE determineCommandType(string commandTypeString);
	string getFirstWord(string &inputLine);
	string removeFirstWord(string &inputLine);
	KEYWORD_TYPE determineKeywordType(string keywordTypeString);
	string makeTask(string &inputLine, Task * &t);
	string executeAdd(string &inputLine);
	int makeInt(string taskNum_str);
	string executeDelete(string &inputLine);
	string executeInvalid(string &inputLine);
	string executeShow(string &inputLine);
	string executeCommand(string &inputLine);
};

#endif
